/**
 * 名晟中鑫是一家专业数字化、智慧化研发和运营的服务提供商，公司本着“星火燎原、创新创业、科技顶天、服务立地”的发展理念，
 * 致力于新型智慧城市的建设和运营，业务包括智慧城市顶层设计咨询、互联网+、智慧政务、智慧医疗、智慧社区、智慧交通、智慧农业、智慧教育、智慧应急等。
 * 积极构建以政府为主导，企业和市民为主体、市场为导向、产学研相结合的推进体系，资源有效整合与共享，不断增强建设智慧城市建设的整体合力，
 * 真正推动民众生存智慧化。
 **/
package com.zj.service;

import com.zj.component.SmsComponent;
import com.zj.constants.RedisKey;
import com.zj.enums.SendCodeEnums;
import com.zj.util.StringOperationUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;

/**
 * @author 自己的名字
 * @version 1.0.0
 * @ClassName NotifyService
 * @Description notify service
 * @createTime 2024年12月10日 21:01
 */
@Service
public class NotifyService {
    @Autowired
    private SmsComponent smsComponent;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    //the captcha code can be used in 10 minutes
    private static final Long CODE_EXPIRED = (long) (1000 * 60 * 10);


    /**
     * send code
     * @param sendCodeEnums send type
     * @param to email or phone
     * @return success or not
     */
    public Boolean sendCode(SendCodeEnums sendCodeEnums, String to){
        //todo judge phone and email
        String cacheKey = String.format(RedisKey.CHECK_OLD_KEY, sendCodeEnums.getName(), to);
        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
        if (StringOperationUtils.isNotEmpty(cacheKey)){
            //check has send in 60 seconds;
            long ttl = Long.parseLong(cacheValue.split("_")[1]);

            if (System.currentTimeMillis() - ttl < (60*1000)){
                //has send in 60 seconds
                return false;
            }
        }
        smsComponent.send(to,to);
        redisTemplate.opsForValue().set(cacheKey,to+"_"+System.currentTimeMillis(),CODE_EXPIRED);
        return true;
    }
}
